using Consul;

namespace hao_Common.Consul.Services
{
    /// <summary>
    /// Consul 服务注册接口
    /// 定义服务注册、注销和查询的核心功能
    /// </summary>
    public interface IConsulServiceRegistry
    {
        /// <summary>
        /// 异步注册服务到 Consul
        /// 根据配置信息将当前服务实例注册到 Consul 注册中心
        /// </summary>
        /// <returns>注册成功返回 true，失败返回 false</returns>
        Task<bool> RegisterServiceAsync();

        /// <summary>
        /// 异步从 Consul 注销服务
        /// 在服务停止时调用，从 Consul 中移除当前服务实例
        /// </summary>
        /// <returns>注销成功返回 true，失败返回 false</returns>
        Task<bool> DeregisterServiceAsync();

        /// <summary>
        /// 异步获取指定服务的所有实例
        /// 包括健康和不健康的服务实例
        /// </summary>
        /// <param name="serviceName">服务名称</param>
        /// <returns>服务实例列表</returns>
        Task<List<ServiceEntry>> GetServicesAsync(string serviceName);

        /// <summary>
        /// 异步获取指定服务的健康实例
        /// 只返回通过健康检查的服务实例
        /// </summary>
        /// <param name="serviceName">服务名称</param>
        /// <returns>健康的服务实例列表</returns>
        Task<List<ServiceEntry>> GetHealthyServicesAsync(string serviceName);
    }
}